package com.aloda.service;

import com.aloda.dto.app.AppAddDTO;
import com.aloda.dto.app.AppReviewDTO;
import com.aloda.dto.app.AppEditDTO;
import com.aloda.entity.App;
import com.aloda.query.AppPageDTO;
import com.aloda.query.AppScrollingPageDTO;
import com.aloda.query.PageQuery;
import com.aloda.query.SearchPageDTO;
import com.aloda.result.PageResult;
import com.aloda.vo.app.AppBrowseVO;
import com.aloda.vo.app.AppDetailVO;
import com.aloda.vo.app.AppPageVO;
import com.aloda.vo.app.AppCardVO;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletResponse;

import java.util.List;

/**
* @author aloda
* @description 针对表【app(应用)】的数据库操作Service
* @createDate 2025-03-05 16:27:38
*/
public interface AppService extends IService<App> {

    /**
     * 新增应用
     * @param appAddDTO
     * @return
     */
    long addApp(AppAddDTO appAddDTO);

    /**
     * 分页查询
     * @param appPageDTO
     * @return
     */
    PageResult<AppPageVO> pageQuery(AppPageDTO appPageDTO);

    /**
     * 编辑应用
     * @param appEditDTO
     * @return
     */
    long editApp(AppEditDTO appEditDTO);

    /**
     * 导出表格
     * @param response
     * @param ids
     */
    void exportAppToExcel(HttpServletResponse response, List<Long> ids);

    /**
     * 审核应用
     * @param appReviewDTO
     */
    void reviewApp(AppReviewDTO appReviewDTO);

    /**
     * 删除应用
     * @param ids
     * @return
     */
    boolean deleteApp(List<Long> ids);

    /**
     * 获取首页推荐应用列表
     * @return
     */
    List<AppCardVO> getRecommendAppList();

    /**
     * 通过id获取应用详情
     * @param id
     * @return
     */
    AppDetailVO getAppDetailById(Long id);

    /**
     * 滚动分页查询
     * @param appScrollingPageDTO
     * @return
     */
    List<AppCardVO> getAppScrollingPageList(AppScrollingPageDTO appScrollingPageDTO);

    /**
     * 用户端新增应用
     * @param appAddDTO
     * @return
     */
    long addAppByUser(AppAddDTO appAddDTO);

    /**
     * 用户端编辑应用
     * @param appEditDTO
     * @return
     */
    long editAppByUser(AppEditDTO appEditDTO);

    /**
     * 用户端删除应用
     * @param id
     * @return
     */
    boolean deleteAppByUser(Long id);

    /**
     * 用户端设置应用分析查看权限
     *
     * @param id
     * @param status
     * @return
     */
    int setAnalysisAuth(Long id, Integer status);

    /**
     * 根据关键词搜索应用
     * @param searchPageDTO
     * @return
     */
    List<AppCardVO> searchApp(SearchPageDTO searchPageDTO);

    /**
     * 通过用户id获取App列表
     * @param id 用户id
     * @return app列表
     */
    PageResult<AppCardVO> getAppListByUserId(Long id, PageQuery pageQuery);

    /**
     * 通过token获取当前登录者创建的应用
     * @return
     */
    PageResult<AppCardVO> getAppListByToken(PageQuery pageQuery);

    /**
     * 获取用户页推荐的应用列表
     * @return
     */
    List<AppBrowseVO> getAppRecommendListInUserPage();

    /**
     * 分页查找当前用户收藏的应用
     * @param pageQuery
     * @return
     */
    PageResult<AppCardVO> pageQueryCollectAppOfCreateUser(PageQuery pageQuery);

    /**
     * 根据用户id分页查询他创建的应用
     * @param id
     * @param pageQuery
     * @return
     */
    PageResult<AppCardVO> pageQueryCollectAppById(Long id, PageQuery pageQuery);

    /**
     * 设置应用推荐状态
     * @param id
     * @param status
     * @return
     */
    int updateAppRecommendStatus(Long id, Integer status);
}
